import csv
from itertools import zip_longest, groupby, chain
import time
name = lambda d: d[0][0]
size = lambda d: d[0][2]
def get_data(values="lazy"):
with open("benchmarks/pypy.csv") as pypy_inp, open("benchmarks/scala.csv") as scala_inp:
data = chain(csv.reader(pypy_inp, delimiter=","), csv.reader(scala_inp, delimiter=","))
data = sorted(data, key=lambda item: item[0])
scala_data = list()
pypy_data = list()
for k, v in groupby(data, key=lambda item: item[0]):
args = [iter(v)]*10
groups = zip_longest(*args, fillvalue=None)
for _ in groups:
if k == "scala":
scala_data.append((k, sum(map(lambda item: float(item[4]), _)) / (10**10)))
elif k == "pypy":
pypy_data.append((k, sum(map(lambda item: float(item[4]), _)) / 10))
if values == "filter_strict":
return(list(map(lambda item: item[1], scala_data[7:13])),
list(map(lambda item: item[1], pypy_data[7:13])))
if values == "lazy":
return(list(map(lambda item: item[1], scala_data[:6])),
list(map(lambda item: item[1], pypy_data[:6])))
if values == "fact1":
return(list(map(lambda item: item[1], scala_data[8:11])),
list(map(lambda item: item[1], pypy_data[8:11])))
if values == "fact3":
return(list(map(lambda item: item[1], scala_data[12:15])),
list(map(lambda item: item[1], pypy_data[12:15])))
from bokeh.plotting import figure, output_file, show, output_notebook
x = [10, 100,1000,10000,100000,1000000]
data = get_data(values="filter_strict")
y = data[0]
z = data[1]
p = figure(title="Lazy filtering and strict evaluation", x_axis_label='size', y_axis_label='seconds' ,tools="pan,box_zoom,reset",)
p.line(x, y, legend="lazy_scala_val", line_width=1,line_color="blue")
p.circle(x, y,fill_color="blue", size=8)
p.line(x, z, legend="lazy_pypy_val", line_width=1, line_color="red")
p.circle(x, z,fill_color="red", size=8)
output_notebook()
show(p)
from bokeh.plotting import figure, output_file, show, output_notebook
x = [10, 100,1000,10000,100000,1000000]
data = get_data(values="lazy")
y = data[0]
z = data[1]
p = figure(title="Lazy evaluation", x_axis_label='size', y_axis_label='seconds' ,tools="pan,box_zoom,reset",)
p.line(x, y, legend="lazy_scala_val", line_width=1,line_color="blue")
p.circle(x, y,fill_color="blue", size=8)
p.line(x, z, legend="lazy_pypy_val", line_width=1, line_color="red")
p.circle(x, z,fill_color="red", size=8)
output_notebook()
show(p)
from bokeh.plotting import figure, output_file, show, output_notebook
x = [20, 40, 80]
data = get_data(values="fact1")
y = data[0]
z = data[1]
p = figure(title="Factorial function", x_axis_label='size', y_axis_label='seconds' ,tools="pan,box_zoom,reset",)
p.line(x, y, legend="lazy_scala_val", line_width=1,line_color="blue")
p.circle(x, y,fill_color="blue", size=8)
p.line(x, z, legend="lazy_pypy_val", line_width=1, line_color="red")
p.circle(x, z,fill_color="red", size=8)
output_notebook()
show(p)
from bokeh.plotting import figure, output_file, show, output_notebook
x = [20, 40, 80]
data = get_data(values="fact3")
y = data[0]
z = data[1]
p = figure(title="Factorial function with TC", x_axis_label='size', y_axis_label='seconds' ,tools="pan,box_zoom,reset",)
p.line(x, y, legend="lazy_scala_val", line_width=1,line_color="blue")
p.circle(x, y,fill_color="blue", size=8)
p.line(x, z, legend="lazy_pypy_val", line_width=1, line_color="red")
p.circle(x, z,fill_color="red", size=8)
output_notebook()
show(p)